#ifndef MYGRAPHICSSCENE_H
#define MYGRAPHICSSCENE_H


#include <QGraphicsScene>
#include <qDebug>
#include <QObject>
#include "LightBulbItem.h"
#include "PowerSourceItem.h"
#include "SwitchItem.h"
class MyGraphicsScene : public QGraphicsScene {
    Q_OBJECT
public:
    MyGraphicsScene(QObject *parent = nullptr) : QGraphicsScene(parent) {}
    QGraphicsItem* now_Component() {

        // 获取选中的项
        QList<QGraphicsItem*> selectedItems = this->selectedItems();

        // 如果有选中的项
        if (!selectedItems.isEmpty()) {
            QGraphicsItem *item = selectedItems.first();  // 获取第一个选中的组件

            qDebug()<<"删除";
            return item;
        }
        qDebug()<<"未选中";
        return nullptr;
    }
signals:
    // 定义信号，发送组件类型（字符串）、旋转角度（数字）、坐标的x和y（数字）
    void emitComponentInfo(const QString &componentType, qreal rotation, qreal posX, qreal posY,const QString &LabelString);
protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *event) override {
        // 调用父类的处理
        QGraphicsScene::mousePressEvent(event);

        // 获取选中的项
        QList<QGraphicsItem*> selectedItems = this->selectedItems();
        for (QGraphicsItem *item : selectedItems) {
            if (auto switchItem = dynamic_cast<SwitchItem*>(item)) {
                // 如果选中的是 SwitchItem
                qDebug() << "SwitchItem selected";

            }
        }
        if (!selectedItems.isEmpty()) {
            QGraphicsItem *item = selectedItems.first();  // 获取当前选中的项
            qreal rotation = item->rotation();           // 获取旋转角度
            QPointF position = item->pos();              // 获取坐标

            // 获取组件的类型名称
            QString componentType,LabelString;

            // 使用 dynamic_cast 判断组件类型并赋值
            if (dynamic_cast<LightBulbItem*>(item)) {
                componentType = "LightBulbItem";
                LabelString=dynamic_cast<LightBulbItem*>(item)->getLabel();
            } else if (dynamic_cast<PowerSourceItem*>(item)) {
                componentType = "PowerSourceItem";
                LabelString=dynamic_cast<PowerSourceItem*>(item)->getLabel();
            } else if (dynamic_cast<SwitchItem*>(item)) {
                componentType = "SwitchItem";
                LabelString=dynamic_cast<SwitchItem*>(item)->getLabel();
            } else {
                componentType = "UnknownItem";
            }

            // 分开获取坐标的 x 和 y
            qreal posX = position.x();
            qreal posY = position.y();

            // 发送信号，分别传递组件类型、旋转角度、坐标的 x 和 y
            emit emitComponentInfo(componentType, rotation, posX, posY,LabelString);
        }
    }
};

#endif // MYGRAPHICSSCENE_H
